#ifndef CYLINDER_H
#define CYLINDER_H

#include <algorithm/shared/data/topology/geometry/Geometry.h>
#include <utils/ParaUtils.h>

#include <boost/describe.hpp>

namespace solar
{
    // 柱面
    class Cylinder : public Geometry
    {
        public:
            Cylinder(double height = 2, double radius = 0.5) : height_(height), radius_(radius) {}
            [[nodiscard]] auto getType() const -> GeometryType override { return type_; }
#include <utils/class_name.inc>

        private:
            double height_;
            double radius_;

            GeometryType type_ = GeometryType::kGeometryCylinder;
            BOOST_DESCRIBE_CLASS(Cylinder, (Geometry), (), (), (height_, radius_))
    };

} // namespace solar
#define CURRENT_CLASS_NAME Cylinder
#include <utils/class_describe_header.inc>
SOLAR_DESCRIBE_CLASS(Cylinder, (Geometry), (), (), (height_, radius_))
#endif
